<?php

require_once("SAdministradorPersistencia.php");
include_once("ISComando.php");

/**
 * Clase padre de todos los Comandos contiene metodos generales que son
 * heredados por todos. Ofrece opciones para establecer el contexto de Seguridad
 * o sesion de usuario dentro del cualse ejecuta un comando y si el comando tiene o
 * no auditoria dentro del sistema
 *
 */

abstract class SComando implements ISComando {

	protected $contexto;
	protected $contextoSeguridad;
	protected $tieneAuditoria;
	protected $tieneAuditoriaHabilitada;

	private static $administradorPersistencia;
	private $fabricaDAO;
	private $orderbystr;
	private $infoPaginacion;
	private $ejecutarSeguro = true;

	/**
	 * Determina si el comando ha sido invocado desde un webservice
	 *
	 * @var boolean
	 */
	private $ws = false;

	public function __construct() {
		 
	}
	/**
	 * Le indica al Administrador de persistencia que debe terminar la sesion
	 * con la Base de Datos despues de que el comando se ha ejecutado
	 *
	 */
	final public function cerrarSesion(){
		self::$administradorPersistencia->cerrarSesion();
	}

	/**
	 * Implementacion del patron Singleton que nos garantiza que entre llamadas siempre se
	 * retornara la misma instacia del Administador de Persistencia
	 *
	 * @return SAdministradorPersistencia
	 */
	public  static function getAdministradorPersistencia(){
		if(self::$administradorPersistencia == null){
			//self::$administradorPersistencia = new SAdministradorPersistencia('oracle','localhost', 'XE', 'etb','etb2009');
			self::$administradorPersistencia = new SAdministradorPersistencia('oracle','172.16.1.5', 'AC', 'INVETB','ETB');
		}elseif(self::$administradorPersistencia->getConexionDB() == null){
			//self::$administradorPersistencia = new SAdministradorPersistencia('oracle','localhost', 'XE', 'etb','etb2009');
			self::$administradorPersistencia = new SAdministradorPersistencia('oracle','172.16.1.5', 'AC', 'INVETB','ETB');
		}
		return self::$administradorPersistencia;
	}

	public function getContexto(){
		return $contexto;
	}

	public function setContexto($unContexto){
		if($unContexto != null){
			$this->contexto = $unContexto;
		}
	}

	/**
	 *
	 * @return SContextoSeguridad
	 */
	public function getContextoSeguridad(){
		return $this->contextoSeguridad;
	}

	/**
	 *
	 * @param SContextoSeguridad $unContextoSeguridad
	 */
	public function  setContextoSeguridad($unContextoSeguridad){
		if($unContextoSeguridad != null){
			$this->contextoSeguridad = $unContextoSeguridad;
		}
	}

	/**
	 *
	 * @return SInfoPaginacion
	 */
	public function getInfoPaginacion(){
		return $this->infoPaginacion;
	}

	/**
	 *
	 * @param SInfoPaginacion $infoPaginacion
	 */
	public function setInfoPaginacion($infoPaginacion){
		$this->infoPaginacion = $infoPaginacion;
	}

	/**
	 *
	 * @return String
	 */
	public function getOrderbystr(){
		return $this->orderbystr;
	}

	/**
	 *
	 * @param String $orderbystr
	 */
	public function setOrderbystr($orderbystr){
		$this->orderbystr;
	}

	/**
	 *
	 * @param boolean $ws
	 */
	public function setWs($ws){
		$this->ws = $ws;
	}

	/**
	 *
	 * @return boolean
	 */
	public function getWs(){
		return $this->ws;
	}

	public function getTieneAuditoria(){
		return $tieneAuditoria;
	}
	public function getTieneAuditoriaHabilitada(){
		return $tieneAuditoriaHabilitada;
	}
	public function setTieneAuditoria($tieneAuditoria){
		$this->tieneAuditoria = $tieneAuditoria;
	}
	public function setTieneAuditoriaHabilitada($tieneAuditoriaHabilitada){
		$this->tieneAuditoriaHabilitada = $tieneAuditoriaHabilitada;
	}

	public function __toString(){
		$objetoTO = new ReflectionObject($this);
		$nombre = $objetoTO->getName();
		$posicion = strpos($nombre, "Impl");
		return substr($nombre, 0, $posicion);
	}

	public function setEjecutarSeguro($ejecutarSeguro){
		$this->ejecutarSeguro = $ejecutarSeguro;
	}


	public function isEjecutarSeguro(){
		return $this->ejecutarSeguro;
	}
}
?>